iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0
自我挑戰組

用LeetCode來訓練大腦的邏輯思維系列 第 29

LeetCode 581. Shortest Unsorted Continuous Subarray

  • 分享至 

  • xImage
  •  

題目

Given an integer array nums, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order.

Return the shortest such subarray and output its length.

題意

找出最短無排序的子陣列

Example 1:

Input: nums = [2,6,4,8,10,9,15]
Output: 5

Example 2:

Input: nums = [1,2,3,4]
Output: 0

Example 3:

Input: nums = [1]
Output: 0

解題想法

複製排序後的陣列,與原陣列比較元素的不同,從頭搜尋,遇到第一個不同的元素,紀錄索引值start,從尾搜尋,遇到第一個不同的元素,紀錄索引值end,藉由startend可算出陣列的長度。

Solution

var findUnsortedSubarray = function (nums) {
  let len = nums.length;
  let nums1 = nums.map(x => x).sort((x, y) => x - y);
  let start = 0;
  let end = 0;
  let x = 1;
  let y = 1;
  for (let i = 0; i < len; i++) {
    if (nums1[i] !== nums[i] && x) {
      start = i;
      x = 0;
    }
    if (nums1[len - i - 1] !== nums[len - i - 1] && y) {
      end = len - i - 1;
      y = 0;
    }
  }
  return (start || end) ? end - start + 1 : 0;
};

上一篇
LeetCode 1. Two Sum
下一篇
LeetCode 896. Monotonic Array
系列文
用LeetCode來訓練大腦的邏輯思維30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言